A computer operating system may run on a “virtual machine” on the physical computer. In a virtual machine, if the operating system attempts to access hardware resources, the access is intercepted by a layer known as a “virtual machine monitor” (VMM), which can redirect the access to actual hardware. For example, the address space used by the operating system for main memory, known as “physical memory,” may be different from the machine addresses of the actual memory hardware the operating system is actually using, known as “machine memory.” Application processes may use different logical memory addresses, known as “virtual memory,” The term “logical memory” is used to refer to either physical or virtual memory. The “machine memory” may be in any convenient form, for example, it may be in random access memory (RAM), or a disk file.
Memory addresses may be divided into pages, which are blocks of memory of a convenient size for administration. Pages of virtual memory may “map” into physical memory at the operating system level, and pages of physical memory may map to pages of machine memory at the VMM level. This may be done by maintaining a table that maps pages at one level to pages at another level. The pages are usually of uniform size, so that they can be handled consistently and interchanged if necessary. Depending on how a particular computer is arranged, a memory access by an application process may in practice be translated in a single stage from a virtual memory address to a machine memory address. The use of a VMM makes it possible for two or more operating systems, which may comprise two or more instances of the same operating system, to run on a single physical computer, without problems arising because one or both operating systems require exclusive control of system resources or of memory in certain address ranges.
It is sometimes desired to “migrate” a process or application from one operating system or virtual machine to another, without the interruption to user service that would be caused by closing down the process on the one operating system and restarting it on the other. This can be done by “checkpointing” the process on the first or “source” virtual machine, migrating the checkpointed process to the second or “destination” virtual machine, and restoring and resuming the process from the checkpoint. “Checkpointing” involves encapsulating and saving to memory the information that is required to enable the process to resume where it was stopped without loss of data. Checkpointing requires that sufficient data about the state of a process be saved to memory to enable the execution of process to be resumed at a later time. In current implementations, the information that is checkpointed and migrated typically consists of at least the contents of data registers, the kernel state associated with the process, and the memory state of the process. In the case of a large server application, the memory state may constitute the bulk of the size of the checkpoint. The data registers and kernel state may be stored in any convenient and suitable location. The kernel state may be represented in a logical, rather than a physical, manner.